import java.util.HashMap;
import java.util.Map;

public class LeetCode76 {
    public static void main(String[] args) {
        System.out.println(minWindow("ADOBECODEBANC", "ABC"));
    }

    public static String minWindow(String s, String t) {
        int sLen = s.length();
        int tLen = t.length();
        String ret = null;
        //为t创建哈希表
//        Map<Character, Integer> hash = new HashMap<>();
//        for (int i = 0; i < tLen; i++) {
//            char ch = t.charAt(i);
//            hash.put(ch, hash.getOrDefault(ch, 0) + 1);
//        }
        int[] arr = new int[128];
        for (int i = 0; i < tLen; i++) {
            char ch = t.charAt(i);
            arr[ch]++;
        }
//        Map<Character, Integer> hash1 = new HashMap<>();
        int[] arr1 = new int[128];
        int left = 0, right = 0, count = 0;
        for (; right < sLen; right++) {
            char ch = s.charAt(right);
//            hash1.put(ch, hash1.getOrDefault(ch, 0) + 1);
//            if (hash1.get(ch) <= hash.getOrDefault(ch, 0)) {
//                count++;
//            }
            arr1[ch]++;
            if (arr1[ch] <= arr[ch]) {
                count++;
            }
            //            if (count == tLen) {
//                if (ret == null) {
//                    ret = s.substring(left, right + 1);
//                } else {
//                    ret = ret.length() < right - left + 1 ? ret : s.substring(left, right + 1);
//                }
//            }
            while (count == tLen) {
                if (ret == null) {
                    ret = s.substring(left, right + 1);
                } else {
                    ret = ret.length() < right - left + 1 ? ret : s.substring(left, right + 1);
                }
                char ch1 = s.charAt(left++);
//                if (hash1.get(ch1) <= hash.getOrDefault(ch1, 0)) {
//                    count--;
//                }
//                hash1.put(ch1, hash1.get(ch1) - 1);
                if (arr1[ch1] <= arr[ch1]) {
                    count--;
                }
                arr1[ch1]--;
            }
            System.out.println(left);
        }

        return ret;
    }
}
